#include "common.h"

#include <assert.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>

#include "tests/common_test.h"
#include "util/process.h"
#include "util/thread.h"
// 这里没有直接用到的头文件，可以不予引用，直接在单元测试的meson.build配置好.c文件即可

// 定义的任意一个整数做为退出码
static int exit_id=1249;
/*
static void test_sc_process_wait(void){
    TEST_START_INFO;

    TEST_LINE_REPORT_START;

    pid_t pid;
    id_t id;
    int status;
    int ret;
    pid = fork();

    if(pid == -1){
        perror("fork error");
        exit(1);
    }
    //子进程
    else if(pid == 0){        
        printf("I'm child, pid = %d\n", getpid());
        sleep(1);
        // TODO 经测试，exit_id 小于255时，传几下面的 info.si_status 语句返回几 ,大于255的规则还没有找到
        exit(exit_id);    //子进程以_exit方式退出，退出状态的值为8
    }
    //父进程
    else{

        sc_process_wait(pid,false);   

        siginfo_t info;
        //清空siginfo结构体
        memset(&info , 0 , sizeof(siginfo_t));
        ret = waitid(P_ALL , id , &info , WEXITED);
        if(ret < 0){
            perror("waitid error:");
        }
        //判断子进程是否以_exit方式退出
        if(info.si_code == CLD_EXITED)
        {
            printf("si_code = CLD_EXITED\n");
        }
        //打印子进程退出状态的值
        printf("si_status = %d\n" , info.si_status);
        //assert(exit_id == info.si_status);
    } 

    TEST_END_INFO;
}
*/
int main(int argc, char *argv[]) {
    (void) argc;
    (void) argv;

    //test_sc_process_wait();

    return 0;
};